//
//  CZHomeViewController.swift
//  iOSWeibo10
//
//  Created by ge on 16/5/9.
//  Copyright © 2016年 ge. All rights reserved.
//

import UIKit

// 打通数据 -> 获取服务器的数据,看看有没有什么问题
class CZHomeViewController: CZBaseTableViewController {
    
    // MARK: - 属性
    private let reuseIdentifier = "cell"
    
    /// 要显示的微博数据
    var statuses: [CZStatus]? {
        didSet {
            // 模型数据改变了
            self.tableView.reloadData()
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // 没有登录就不要执行后面的代码
        if !CZUserAccountViewModel.sharedInstance.isUserLogin {
            return
        }
        
        setupNavigationBar()
        
        // 注册cell
        tableView.registerClass(CZStatusCell.self, forCellReuseIdentifier: reuseIdentifier)
        
        // 设置cell预估行高
        tableView.estimatedRowHeight = 200
        // 根据cell的约束自动计算行高, 测量contentView的高度
        tableView.rowHeight = UITableViewAutomaticDimension
        
        // 取消tableViewcell的分隔线
        tableView.separatorStyle = UITableViewCellSeparatorStyle.None
        
        // 加载微博数据
        CZStatusViewModel.sharedInstance.loadStatus { (statuses, error) -> () in
            if error != nil {
                CZPrint(items: "请求微博数据失败了: \(error)")
                return
            }
            
            //请求成功了
            CZPrint(items: "在控制器里面打印获取到的微博数据: \(statuses)")
            
            // 将网络请求返回的微博模型赋值给控制器的属性
            self.statuses = statuses
        }
        
        // 添加下拉刷新控件到tableView
        tableView.addSubview(pullDownToRefreshControl)
    }
    
    // 设置导航栏
    private func setupNavigationBar() {
    
        // 方案4
        navigationItem.leftBarButtonItem = UIBarButtonItem(imageName: "navigationbar_friendsearch", target: self, action: "didClickFriendsearch")
        navigationItem.rightBarButtonItem = UIBarButtonItem(imageName: "navigationbar_pop", target: self, action: "didClickPop")
        
        // 测试
//        CZUserAccountViewModel.sharedInstance.userAccount?.screen_name = nil
        // 获取用户的名称
        let name = CZUserAccountViewModel.sharedInstance.userAccount?.screen_name ?? "未知名称"
        
        // 设置首页titleView
        let button = CZHomeTitleButton()
        button.setTitle(name, forState: UIControlState.Normal)
        button.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)
        button.titleLabel?.font = UIFont.systemFontOfSize(16)
        button.setImage(UIImage(named: "navigationbar_arrow_down"), forState: UIControlState.Normal)
        
        button.addTarget(self, action: "didClickTitlView:", forControlEvents: UIControlEvents.TouchUpInside)
        
        button.sizeToFit()
        
        navigationItem.titleView = button
    }
    
    // MARK: 标题按钮点击事件
    func didClickTitlView(button: UIButton) {
        // 三角形旋转依靠button.selected这个属性来确定
        // 1.修改按钮的状态
        button.selected = !button.selected

        UIView.animateWithDuration(0.25) { () -> Void in
            let transform = button.selected ? CGAffineTransformMakeRotation(CGFloat(M_PI - 0.0001)) : CGAffineTransformIdentity
            
            button.imageView?.transform = transform
        }
    }
    
    // MARK: 按钮点击事件
    func didClickFriendsearch() {
        CZPrint(items: "点击了左边")
    }
    
    func didClickPop() {
        CZPrint(items: "点击了右边")
        
        // 加载本地json数据
        let file = NSBundle.mainBundle().pathForResource("statuses", ofType: "json")!
        let data = NSData(contentsOfFile: file)!
        let json = try! NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(rawValue:0))
        CZPrint(items: "解析本地数据: \(json)")
    }
    
    // MARK: - 懒加载
    /// 下拉刷新控件
    private lazy var pullDownToRefreshControl: CZPullDownToRefreshControl = CZPullDownToRefreshControl()
}

// 扩展CZHomeViewController, talbeView显示数据
extension CZHomeViewController {
    // 让tableView的cell高度根据自动约束来自己确定
//    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
//
//    }
    
    /// 返回cell的数量
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // ?? 前面的可选没有值就使用??后面的值
        // ?? 前面的可选有值只用??前面的可选,进行后续的操作
        return statuses?.count ?? 0
    }
    
    /// cell显示内容
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        // 根据identifier去缓存池中查找,缓存池中有就返回一个cell,缓存池中没有,使用注册的cell类型来创建cell
        let cell = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier, forIndexPath: indexPath) as! CZStatusCell
        
        // 获取到对应的模型
        let status = self.statuses![indexPath.row]
        
        // 1.数据源给cell设置对应的模型
        cell.status = status
        
        return cell
    }
}































